package controller;

import bo.AcaoBO;
import bo.AcaoGrupoBO;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import model.Acao;
import model.AcaoGrupo;
import util.ConsUtil;
import util.CustomException;
import util.FacesUtil;

@ManagedBean(name = "acaoController")
@ViewScoped
public class AcaoController implements Serializable {

    private AcaoBO acaoBO = new AcaoBO();
    private AcaoGrupoBO acaoGrupoBO = new AcaoGrupoBO();
    private ConsUtil.Operacao operacao;
    private List<Acao> acoes;
    private List<Acao> acoesFiltrados;
    private Acao acaoSelecionado = new Acao();
    private List<AcaoGrupo> acaoGrupos;

    public AcaoController() {
        try {
            this.acoes = acaoBO.selecionarTodos();
            this.operacao = ConsUtil.Operacao.CONSULTAR;
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void novo() {
        try {
            setAcaoSelecionado(new Acao());
            getAcaoSelecionado().setAcaoAtivo(Boolean.TRUE);
            setAcaoGrupos(acaoGrupoBO.selecionarTodos());
            if (!getAcaoGrupos().isEmpty()) {
                getAcaoSelecionado().setAcaoGrupo(getAcaoGrupos().get(0));
            }
            setOperacao(ConsUtil.Operacao.NOVO);
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void alterar() {
        try {
            Long acaoCodigo = Long.valueOf(FacesUtil.getRequestParameterMap("acaoCodigo"));
            setAcaoSelecionado(acaoBO.selecionarPorId(acaoCodigo));
            getAcaoSelecionado().setAcaoGrupo(acaoGrupoBO.selecionarPorId(getAcaoSelecionado().getAcaoGrupo().getAgrCodigo()));
            setAcaoGrupos(acaoGrupoBO.selecionarTodos());
            setOperacao(ConsUtil.Operacao.ALTERAR);
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void excluir() {
        try {
            Long acaoCodigo = Long.valueOf(FacesUtil.getRequestParameterMap("acaoCodigo"));
            setAcaoSelecionado(acaoBO.selecionarPorId(acaoCodigo));
            setOperacao(ConsUtil.Operacao.EXCLUIR);
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void salvar() {
        try {
            acaoBO.salvar(acaoSelecionado);
            setAcoes(acaoBO.selecionarTodos());
            setOperacao(ConsUtil.Operacao.CONSULTAR);
            FacesUtil.exibirMsgInfo(null, "Concluído", "Ação salva com sucesso!");
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public void confirmarExclusao() {
        try {
            acaoBO.excluir(acaoSelecionado);
            setAcoes(acaoBO.selecionarTodos());
            setOperacao(ConsUtil.Operacao.CONSULTAR);
            FacesUtil.exibirMsgInfo(null, "Concluído", "Ação excluída com sucesso!");
        } catch (CustomException e) {
            FacesUtil.exibirMsgExcecao(e);
        }
    }

    public ConsUtil.Operacao getOperacao() {
        return operacao;
    }

    public void setOperacao(ConsUtil.Operacao operacao) {
        this.operacao = operacao;
    }

    public List<Acao> getAcoes() {
        return acoes;
    }

    public void setAcoes(List<Acao> acoes) {
        this.acoes = acoes;
    }

    public Acao getAcaoSelecionado() {
        return acaoSelecionado;
    }

    public void setAcaoSelecionado(Acao acaoSelecionado) {
        this.acaoSelecionado = acaoSelecionado;
    }

    public List<Acao> getAcoesFiltrados() {
        return acoesFiltrados;
    }

    public void setAcoesFiltrados(List<Acao> acoesFiltrados) {
        this.acoesFiltrados = acoesFiltrados;
    }

    public List<AcaoGrupo> getAcaoGrupos() {
        return acaoGrupos;
    }

    public void setAcaoGrupos(List<AcaoGrupo> acaoGrupos) {
        this.acaoGrupos = acaoGrupos;
    }
}
